home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
c
/
jpegagasrc
/
jpegaga
/
writepixel.asm
< prev
Wrap
Assembly Source File
|
1995-11-08
|
4KB
|
295 lines
*** New WritePixelLine8 ***
* (c) 1995 by Pawel Hernik, Günther Röhrich and various others
machine mc68020
XDEF _newWPL8
XDEF _sweep2nd
XREF _linebuf
XREF _PlanePos
cseg
_newWPL8:
movem.l d0-a6,-(sp)
sub.w #16,sp
move.l a2,a0 ;chunky
move.l _linebuf,a1
move.l a1,a2
move.l 2*4+16(sp),d0
add.w #$1f,d0
and.w #~$1f,d0
add.w d0,a2
move.l #$00ff00ff,a3
move.l #$0f0f0f0f,a4
.sweep1st:
movem.l (a0),d0-d7
move.l d4,a6
move.w d0,d4
swap d4
move.w d4,d0
move.w a6,d4
move.l d5,a6
move.w d1,d5
swap d5
move.w d5,d1
move.w a6,d5
move.l d6,a6
move.w d2,d6
swap d6
move.w d6,d2
move.w a6,d6
move.l d7,a6
move.w d3,d7
swap d7
move.w d7,d3
move.w a6,d7
move.l d7,a6
move.l d6,a5
move.l a3,d6
move.l a3,d7
and.l d0,d6
and.l d2,d7
eor.l d6,d0
eor.l d7,d2
lsl.l #8,d6
lsr.l #8,d2
or.l d2,d0
or.l d7,d6
move.l a3,d7
move.l a3,d2
and.l d1,d7
and.l d3,d2
eor.l d7,d1
eor.l d2,d3
lsl.l #8,d7
lsr.l #8,d3
or.l d3,d1
or.l d2,d7
move.l a4,d2
move.l a4,d3
and.l d0,d2
and.l d1,d3
eor.l d2,d0
eor.l d3,d1
lsr.l #4,d1
or.l d1,d0
move.l d0,(a1)+
lsl.l #4,d2
or.l d3,d2
move.l d2,(a1)+
move.l a4,d3
move.l a4,d1
and.l d6,d3
and.l d7,d1
eor.l d3,d6
eor.l d1,d7
lsr.l #4,d7
or.l d7,d6
move.l d6,(a1)+
lsl.l #4,d3
or.l d1,d3
move.l d3,(a1)+
move.l a6,d7
move.l a5,d6
move.l a3,d0
move.l a3,d1
and.l d4,d0
and.l d6,d1
eor.l d0,d4
eor.l d1,d6
lsl.l #8,d0
lsr.l #8,d6
or.l d6,d4
or.l d1,d0
move.l a3,d1
move.l a3,d6
and.l d5,d1
and.l d7,d6
eor.l d1,d5
eor.l d6,d7
lsl.l #8,d1
lsr.l #8,d7
or.l d7,d5
or.l d6,d1
move.l a4,d6
move.l a4,d7
and.l d4,d6
and.l d5,d7
eor.l d6,d4
eor.l d7,d5
lsr.l #4,d5
or.l d5,d4
move.l d4,(a1)+
lsl.l #4,d6
or.l d7,d6
move.l d6,(a1)+
move.l a4,d7
move.l a4,d5
and.l d0,d7
and.l d1,d5
eor.l d7,d0
eor.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l d0,(a1)+
lsl.l #4,d7
or.l d5,d7
move.l d7,(a1)+
add.w #32,a0
cmp.l a2,a1
bne .sweep1st
move.l _linebuf,a0
move.l #$33333333,a5
move.l #$55555555,a6
move.l a2,_counter
lea _PlanePos,a1
movea.w #0,a2
_sweep2nd:
move.l (a0),d0
move.l 8(a0),d1
move.l 16(a0),d2
move.l 24(a0),d3
move.l a5,d6
move.l a5,d7
and.l d0,d6
and.l d2,d7
eor.l d6,d0
eor.l d7,d2
lsl.l #2,d6
lsr.l #2,d2
or.l d2,d0
or.l d7,d6
move.l a5,d7
move.l a5,d2
and.l d1,d7
and.l d3,d2
eor.l d7,d1
eor.l d2,d3
lsl.l #2,d7
lsr.l #2,d3
or.l d3,d1
or.l d2,d7
move.l a6,d2
move.l a6,d3
and.l d0,d2
and.l d1,d3
eor.l d2,d0
eor.l d3,d1
lsr.l #1,d1
or.l d1,d0
move.l d0,([7*4,a1],a2.l)
add.l d2,d2
or.l d3,d2
move.l d2,([6*4,a1],a2.l)
move.l a6,d3
move.l a6,d1
and.l d6,d3
and.l d7,d1
eor.l d3,d6
eor.l d1,d7
lsr.l #1,d7
or.l d7,d6
move.l d6,([5*4,a1],a2.l)
add.l d3,d3
or.l d1,d3
move.l d3,([4*4,a1],a2.l)
move.l 4(a0),d0
move.l 12(a0),d1
move.l 20(a0),d2
move.l 28(a0),d3
move.l a5,d6
move.l a5,d7
and.l d0,d6
and.l d2,d7
eor.l d6,d0
eor.l d7,d2
lsl.l #2,d6
lsr.l #2,d2
or.l d2,d0
or.l d7,d6
move.l a5,d7
move.l a5,d2
and.l d1,d7
and.l d3,d2
eor.l d7,d1
eor.l d2,d3
lsl.l #2,d7
lsr.l #2,d3
or.l d3,d1
or.l d2,d7
move.l a6,d2
move.l a6,d3
and.l d0,d2
and.l d1,d3
eor.l d2,d0
eor.l d3,d1
lsr.l #1,d1
or.l d1,d0
move.l d0,([3*4,a1],a2.l)
add.l d2,d2
or.l d3,d2
move.l d2,([2*4,a1],a2.l)
move.l a6,d3
move.l a6,d1
and.l d6,d3
and.l d7,d1
eor.l d3,d6
eor.l d1,d7
lsr.l #1,d7
or.l d7,d6
move.l d6,([1*4,a1],a2.l)
add.l d3,d3
or.l d1,d3
move.l d3,([0*4,a1],a2.l)
lea 4(a2),a2
add.w #32,a0
cmp.l _counter(pc),a0
bne _sweep2nd
add.w #16,sp
movem.l (sp)+,d0-a6
move.l d2,d0
rts
wd =0
wd16 =2
htm1 =4
row =6
chunkytmp =8
ret =12
;^ 16 bytes on stack
;wd: dc.w 0
;wd16: dc.w 0
;htm1: dc.w 0
;row: dc.w 0
;chunkytmp: dc.l 0 ;tmp address
;ret: dc.l 0
_counter dc.l 0